package com.saya.servlet;

import java.io.IOException;
import java.lang.reflect.Type;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.appengine.api.datastore.Entity;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.saya.model.LineItem;
import com.saya.model.Order;
import com.saya.response.CreateOrderRs;
import com.saya.response.GetOrderRs;
import com.saya.utils.Utils;

@SuppressWarnings("serial")
public class OrderServlet extends HttpServlet {
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
		resp.setContentType("application/json;charset=utf8");
		Boolean validate = Boolean.valueOf(true);
		String des = "Thêm mới đơn đặt hàng thành công";
		String token = req.getParameter("Token");
		String phoneNumber = req.getParameter("PhoneNumber");
		String customerName = req.getParameter("CustomerName");
		String price = req.getParameter("Price");
		String address = req.getParameter("Address");
		String strLineItem = req.getParameter("LineItem");
		try {
			System.out.println(token);
			Entity e = Utils.getEntity(token);
			if (e != null) {
				String loginDate = (String) e.getProperty("LoginDate");
				if ((loginDate != null) && (!"".equals(loginDate))) {
					Date logdate = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss")
							.parse(loginDate);
					Date currentDate = new Date();
					if (currentDate.getTime() - logdate.getTime() > 21600000L) {
						validate = Boolean.valueOf(false);
						des = "Token hết hạn sử dụng, mời bạn đăng nhập lại";
					}
				} else {
					validate = Boolean.valueOf(false);
					des = "Không xác định được thời điểm đăng nhập của bạn";
				}
			} else {
				validate = Boolean.valueOf(false);
				des = "Không tồn tại phiên đăng nhập của bạn";
			}
		} catch (Exception ex) {
			validate = Boolean.valueOf(false);
			des = "Có lỗi khi kiểm tra phiên đăng nhập của bạn";
		}

		String ordernumber = "0";
		if (validate.booleanValue()) {
			Gson gson = new Gson();
			Type listType = new TypeToken<Object>() {
			}.getType();
			@SuppressWarnings("unchecked")
			List<LineItem> lstitem = (List<LineItem>) gson.fromJson(
					strLineItem, listType);
			ordernumber = Order.Create(phoneNumber, customerName, price,
					address, lstitem);
			if (ordernumber.equals("0")) {
				validate = Boolean.valueOf(false);
				des = "Có lỗi khi thêm đơn hàng";
			}
		}

		CreateOrderRs rs = new CreateOrderRs();
		if (validate.booleanValue())
			rs.setCode("0");
		else {
			rs.setCode(ordernumber);
		}

		rs.setMessage(des);
		rs.setOrdernumber(ordernumber);
		Gson gson = new Gson();
		resp.getWriter().println(gson.toJson(rs));
	}

	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws IOException {
		resp.setContentType("application/json;charset=utf8");
		Boolean validate = Boolean.valueOf(true);
		String des = "Lấy danh sách đơn hàng thành công";
		String phoneNumber = req.getParameter("PhoneNumber");
		int limit = 0;
		int offset = 0;
		try {
			limit = Integer.parseInt(req.getParameter("Limit"));
			offset = Integer.parseInt(req.getParameter("Offset"));
		} catch (Exception localException1) {
		}
		List<Order> lstOrder = new ArrayList<Order>();
		try {
			lstOrder = Order
					.getAllOrdersForCustomer(phoneNumber, offset, limit);
		} catch (Exception ex) {
			validate = Boolean.valueOf(false);
			des = "Có lỗi khi lấy danh sách hóa đơn";
		}

		GetOrderRs rs = new GetOrderRs();
		if (validate.booleanValue())
			rs.setCode("0");
		else {
			rs.setCode("1");
		}
		rs.setMessage(des);
		if (lstOrder != null) {
			rs.setOrders(lstOrder);
		}

		Gson gson = new Gson();
		resp.getWriter().println(gson.toJson(rs));
	}
}
